package TestExercises08;

//TCP通信练习5 ---上传文件(多线程版)

/*
想要服务器不停止，能接收很多用户上传的图片。
该怎么做呢?
提示:可以用循环或者多线程。
但是循环不合理，最优解法是(循环+多线程)改写
 */

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

//服务器（Server）
public class Test10 {
    public static void main(String[] args) throws IOException {


        //创建线程池对象
        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                3,//核心线程数量
                16,//线程池大小
                60,//空闲时间（值）
                TimeUnit.SECONDS,//空闲时间（单位）
                new ArrayBlockingQueue<>(2),//阻塞队列
                Executors.defaultThreadFactory(),//线程工厂，让线程池如何创建线程对象
                new ThreadPoolExecutor.AbortPolicy()//拒绝策略
        );


        //1、创建ServerSocket对象
        ServerSocket ss = new ServerSocket(30000);

        while (true) {
            //2、等待客户端来连接
            Socket socket = ss.accept();

            /*//开启一个线程
            //一个用户就对应服务端的一个线程
            //new Thread(new MyRunnable09_10(socket)).start();*/

            pool.submit(new MyRunnable07_08(socket));
        }
    }
}
